package cn.leetcode;

import java.util.HashMap;
import java.util.Map;

public class Code25 {
    public static ListNode reverseKGroup(ListNode head, int k) {
        Map<Integer, ListNode> map = new HashMap<>();
        Map<Integer, String> num = new HashMap<>();
        int integer = 1;
        if(head != null){
            int i = 0;
            ListNode flag = head;
            while (flag != null){
                ListNode first = null;
                while (i < k && flag != null){
                    if(i==0){
                        first = new ListNode(flag.val);
                        map.put(integer, first);
                        integer++;
                    }else{
                        first.next = new ListNode(flag.val);
                        first = first.next;
                    }
                    i++;
                    flag = flag.next;
                }
                if(i == k){
                    num.put(integer-1, "1");
                }else{
                    num.put(integer-1, "0");
                }
                i = 0;
            }
        }
        integer--;
        for (int i=1; i<=integer; i++){
            ListNode listNode = map.get(i);
            String s = num.get(i);
            if("1".equals(s)){
                ListNode list = Code206.reverseList(listNode);
                map.put(i, list);
            }
        }
        ListNode result = map.get(1);
        for (int i=1; i<=integer; i++){
            ListNode listNode = map.get(i);
            while (listNode.next != null){
                listNode = listNode.next;
            }
            if(i < integer){
                listNode.next = map.get(i + 1);
            }
        }
        return result;
    }

}


